import App from './App'

// #ifndef VUE3
import Vue from 'vue'
import './uni.promisify.adaptor'
Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({
  ...App
})
app.$mount()
// #endif

// #ifdef VUE3
import { createSSRApp } from 'vue'
export function createApp() {
  const app = createSSRApp(App);
  class UniWebSocked{
	   constructor(url){
		   this.url=url;
		   this.$socketTask=null;
		   this.is_open_socket=false;//是否连接？
		   this.resultmsg=null;//返回消息
		   this.msgupdata=false;//消息是否更新
		   
	   }
	   // 连接与初始化
	   connectSocketInit(){
	   	  // 创建一个this.socketTask对象【发送、接收、关闭socket都由这个对象操作】
	   	  this.socketTask = uni.connectSocket({
	   	  	// 【非常重要】必须确保你的服务器是成功的,如果是手机测试千万别使用ws://127.0.0.1:9099【特别容易犯的错误】
	   	  	url: this.url, //"ws://127.0.0.1:9099/echo",
	   	  	success(data) {
	   	  		console.log("websocket连接成功");
	   	  	},
	   	  });
	   	   
	   	  // 消息的发送和接收必须在正常连接打开中,才能发送或接收【否则会失败】
	   	  this.socketTask.onOpen((res) => {
	   	  	console.log("WebSocket连接正常打开中...！");
	   	  	this.is_open_socket = true;
			
			
	   	  	// 注：只有连接正常打开中 ，才能正常成功发送消息
	   	  	/* this.socketTask.send({
	   	  		data: "uni-app发送一条消息",
	   	  		async success() {
	   	  			console.log("消息发送成功");
	   	  		},
	   	  	}); */
			
			
	   	  	// 注：只有连接正常打开中 ，才能正常收到消息
	   	  	this.socketTask.onMessage((res) => {
	   	  		console.log("收到服务器内容：" + res.data);
				this.resultmsg=res.data;
				this.msgupdata=true;
	   	  	});
	   	  })
	   	  // 这里仅是事件监听【如果socket关闭了会执行】
	   	  this.socketTask.onClose(() => {
	   	  	console.log("已经被关闭了")
	   	  })
	   }
	   // 关闭
	   closeSocket(){
	   				this.socketTask.close({
	   					success(res) {
	   						this.is_open_socket = false;
	   						console.log("关闭成功", res)
	   					},
	   					fail(err) {
	   						console.log("关闭失败", err)
	   					}
	   				})
	   			}
		// 发送消息
		    async clickReques(msg,history) {

		        if (this.is_open_socket) {
		            this.socketTask.send({
		                data: JSON.stringify({ msg, history }),
		                success() {
		                    console.log("消息发送成功!");
		                },
		            });
		            // 等待消息更新
		            while (!this.msgupdata) {
		                await new Promise(resolve => setTimeout(resolve, 1000)); // 等待1秒
		            }
		            const result = this.resultmsg;
		            this.msgupdata = false; // 重置消息更新标志
		            this.resultmsg = null; // 重置消息内容
		            return result;
		        } else {
		            console.log("未打开长连接就发送");
		            return null;
		        }
		    }
			
		leave(){ // 貌似是关闭当前页面，并跳转指定页面
							this.$uniReLaunch("/pages/index/index")
			}
				
	   
  }
  app.config.globalProperties.$Qwenchat=new UniWebSocked("ws://127.0.0.1:9099/chat");
  

  return {
    app
  }
}
// #endif
